package com.PAT.practice02;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/02/16/10:01
 * @Description:
 * @Target:
 */
public class 求平均值 {
    /*
    *
    * 本题的基本要求非常简单：给定 N 个实数，计算它们的平均值。但复杂的是有些输入数据可能是非法的。
    * 一个“合法”的输入是 [−1000,1000] 区间内的实数，并且最多精确到小数点后 2 位。当你计算平均值的时候，不能把那些非法的数据算在内。

        输入格式：
        输入第一行给出正整数 N（≤100）。随后一行给出 N 个实数，数字间以一个空格分隔。

        输出格式：
        对每个非法输入，在一行中输出 ERROR: X is not a legal number，其中 X 是输入。最后在一行中输出结果：The average of K numbers is Y，其中 K 是合法输入的个数，Y 是它们的平均值，精确到小数点后 2 位。如果平均值无法计算，则用 Undefined 替换 Y。如果 K 为 1，则输出 The average of 1 number is Y。

        输入样例 1：
        7
        5 -3.2 aaa 9999 2.3.4 7.123 2.35
        输出样例 1：
        ERROR: aaa is not a legal number
        ERROR: 9999 is not a legal number
        ERROR: 2.3.4 is not a legal number
        ERROR: 7.123 is not a legal number
        The average of 3 numbers is 1.38
    *
    * */

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String len = in.nextLine();
        String ss1 = in.nextLine();
        String[] s = ss1.split(" ");

        double sum = 0;
        int K = 0;



        for (int i = 0; i < s.length; i++) {
            if (isCorrect(s[i])==true){
                sum+=Double.valueOf(s[i]);
                K++;
            }else {
                System.out.println("ERROR: "+s[i]+" is not a legal number");
            }
        }


        if (K<1){
            System.out.println("The average of 0 numbers is Undefined");
        }else if (K==1){
            System.out.print("The average of ");
            System.out.print(K);
            System.out.print(" number is ");
            System.out.format("%.2f",(sum/K));
        }else {
            System.out.print("The average of ");
            System.out.print(K);
            System.out.print(" numbers is ");
            System.out.format("%.2f",(sum/K));
        }



    }

    // 合法数值 [−1000.XX,1000.XX]
    // 判断较多，字符串进行吧，需要切割小数点，进行验证

    static boolean isCorrect(String ss){
        if (ss.charAt(0)=='+'||ss.charAt(0)=='-'){
            ss = ss.substring(1);
        }
        boolean flag = true;
        boolean tryFlag = true;
        String[] split = ss.split("\\.");
        if (split.length>2){
            flag = false;
        }
        // 是不是数字判断
        try {
            Double.valueOf(ss);
        }catch (Exception e){
            tryFlag = false;
            flag = false;
        }

        if (tryFlag==true){

            if (Double.valueOf(ss)>1000||Double.valueOf(ss)<-1000){
                flag = false;
            }

            if (split.length>1&&split[1].length()>2){
                flag = false;
            }

        }


        return flag;
    }
}
